<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    //let const命令, 都是用来声明变量的 语法类似于 var
//let var const 区别
//1.是否存在变量提升？ var声明的变量存在变量提升 let const不存在
//2.是否存在暂时性死区？ var声明的变量不存在暂时性死区 let const存在
//3.是否允许重复声明变量？ var声明的变量可以重复声明  let const不能重复声明
//4.是否存在块级作用域？ var声明的变量不存在块级作用域 let const存在
//5.是否能修改声明的变量？ var let 可以修改 const声明的变量不可以修改并且必须赋初始值




    //是否存在变量提升？
    //var 声明的变量存在变量提升 变量可以在声明之前调用 值为undefined
    //let const 不存在变量提升，他们所声明的变量在声明后使用 否则报错
    // console.log(f);
    // var f = 1; //undefined

    // console.log(g);
    // let g = 2; //Uncaught SyntaxError: Identifier 'f' has already been declared

    // console.log(e);
    // const e = 3; //Uncaught SyntaxError: Identifier 'f' has already been declared


    //是否允许重复声明变量？
    //var可以重复声明
    //let const 不可以重复声明
    // var f = 1;
    // var f = 2;
    // console.log(f); //2

    // let g = 6;
    // let g = 7;
    // console.log(g); //报错

    // const h = 9;
    // const h = 7;
    // console.log(h); //报错


    //是否存在块级作用域？
    //var不存在块级作用域
    //let const 存在块级作用域

    // {
    //     var f = 1;
        
    // }
    // console.log(f); //1
    // {
    //     let e = 2;
    // }
    // console.log(e); //not defined
    // {
    //     const r = 3;
    // }
    // console.log(r); //not defined


    //是否能修改声明的变量
   // let var 可以修改 const不可以修改
   //const 声明的变量 必须要赋值 并且不能修改
    // var a;
    // a=1;
    // a=2;
    // console.log(a);

    // let b;
    // b=3;
    // b=4;
    // console.log(b);

    // const c;
    // c=1;
    // c=5;
    // console.log(c);

    const obj = {
        a:1
    }
    console.log(obj);
    obj.a = 2;
    console.log(obj);

    //const如果存储的是一个对象 只要内存地址不变 修改里边的内容是可以的
</script>